import { loainApi, getUserInfoApi } from '@/api/user'
// 用户信息存入vuex里边
// user userInfo 初始化
// 拿值， 用户信息接口（封装/引入）提供 ===> 封装action
// 近可能早 触发 action ===> token ===> beforeEach ===> token
// 优化点：判断是否拿过用户信息 没有必要重复请求 ===> userId
// 推荐用户信息不缓存

// 用户信息应该维护在Vuex中

// 拿用户信息 ===> 用户信息接口提供 ===> action
// 用户信息接口 封装/引入
// 触发 action  ===> 最合适的时机 ==> 拿到token之后

// 既然最早为什么 不直接写在成功登录之后呢 ===> loginAction里
const state = {
  token: null,
  userInfo: {} //  userInfo ===> null
  // null.username 会报错
}
const mutations = {
  setToken(state, token) {
    state.token = token
  },
  delToekn(state) {
    state.token = null
  },
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  async loginAction({ commit }, playlaod) {
    try {
      const res = await loainApi(playlaod)
      console.log(res)
      // context.commit
      commit('setToken', res)
    } catch (err) {
      console.log(err)
    }
  },
  async getUserAction({ commit }) {
    const res = await getUserInfoApi()
    commit('setUserInfo', res)
  },
  logout({ commit }) {
    commit('delToekn')
    commit('removeUserInfo')
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}

// token 相关的维护
// token ===> vuex state ===> 2个m
// token ===> 登录接口(封装/引入) ===> 登录action
// 触发 登录action 检验效果
